﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ShredTheLog.Api;
using System.ComponentModel.Composition;

namespace ShredTheLog.Plugins
{
    [Export(typeof(ISmileyDefinition))]
    [PartCreationPolicy(CreationPolicy.Shared)]
    public sealed class SmileSmileyDefinition : ISmileyDefinition
    {
        public const string IDString = "Smile";
        public string ID { get { return IDString; } }
        public string[] Patterns { get { return new string[] { @":-)", @":)", @"=)" }; } }
    }

    [Export(typeof(ISmileyDefinition))]
    [PartCreationPolicy(CreationPolicy.Shared)]
    public sealed class TongueSmileyDefinition : ISmileyDefinition
    {
        public const string IDString = "Tongue";
        public string ID { get { return IDString; } }
        public string[] Patterns { get { return new string[] { @":-P", @":P", @":-p", @":p", @":-Р", @":Р", @":-р", @":р" }; } }
    }

    [Export(typeof(ISmileyDefinition))]
    [PartCreationPolicy(CreationPolicy.Shared)]
    public sealed class WinkSmileyDefinition : ISmileyDefinition
    {
        public const string IDString = "Wink";
        public string ID { get { return IDString; } }
        public string[] Patterns { get { return new string[] { @";-)", @";)" }; } }
    }

    [Export(typeof(ISmileyDefinition))]
    [PartCreationPolicy(CreationPolicy.Shared)]
    public sealed class GrinSmileyDefinition : ISmileyDefinition
    {
        public const string IDString = "Grin";
        public string ID { get { return IDString; } }
        public string[] Patterns { get { return new string[] { @":-D", @":D", @"=D" }; } }
    }

    [Export(typeof(ISmileyDefinition))]
    [PartCreationPolicy(CreationPolicy.Shared)]
    public sealed class ConfusedSmileyDefinition : ISmileyDefinition
    {
        public const string IDString = "Confused";
        public string ID { get { return IDString; } }
        public string[] Patterns { get { return new string[] { @"o.O", @"O.o", @"о.О", @"О.о", @"o_O", @"O_o", @"о_О", @"О_о", @":S" }; } }
    }

    [Export(typeof(ISmileyDefinition))]
    [PartCreationPolicy(CreationPolicy.Shared)]
    public sealed class ShockedSmileyDefinition : ISmileyDefinition
    {
        public const string IDString = "Shocked";
        public string ID { get { return IDString; } }
        public string[] Patterns { get { return new string[] { @":-O", @":O", @":-o", @":o", @":-О", @":О", @":-о", @":о" }; } }
    }

    [Export(typeof(ISmileyDefinition))]
    [PartCreationPolicy(CreationPolicy.Shared)]
    public sealed class UnsureSmileyDefinition : ISmileyDefinition
    {
        public const string IDString = "Unsure";
        public string ID { get { return IDString; } }
        public string[] Patterns { get { return new string[] { @":-/", @":/", @":-\", @":\" }; } }
    }

    [Export(typeof(ISmileyDefinition))]
    [PartCreationPolicy(CreationPolicy.Shared)]
    public sealed class SadSmileyDefinition : ISmileyDefinition
    {
        public const string IDString = "Sad";
        public string ID { get { return IDString; } }
        public string[] Patterns { get { return new string[] { @":-(", @":(" }; } }
    }

    [Export(typeof(ISmileyDefinition))]
    [PartCreationPolicy(CreationPolicy.Shared)]
    public sealed class AngrySmileyDefinition : ISmileyDefinition
    {
        public const string IDString = "Angry";
        public string ID { get { return IDString; } }
        public string[] Patterns { get { return new string[] { @">:-(", @">:(" }; } }
    }

    [Export(typeof(ISmileyDefinition))]
    [PartCreationPolicy(CreationPolicy.Shared)]
    public sealed class CrySmileyDefinition : ISmileyDefinition
    {
        public const string IDString = "Cry";
        public string ID { get { return IDString; } }
        public string[] Patterns { get { return new string[] { @":'(" }; } }
    }

    [Export(typeof(ISmileyDefinition))]
    [PartCreationPolicy(CreationPolicy.Shared)]
    public sealed class KissSmileyDefinition : ISmileyDefinition
    {
        public const string IDString = "Kiss";
        public string ID { get { return IDString; } }
        public string[] Patterns { get { return new string[] { @":-*" }; } }
    }

    [Export(typeof(ISmileyDefinition))]
    [PartCreationPolicy(CreationPolicy.Shared)]
    public sealed class HeartSmileyDefinition : ISmileyDefinition
    {
        public const string IDString = "Heart";
        public string ID { get { return IDString; } }
        public string[] Patterns { get { return new string[] { @"<3" }; } }
    }

    [Export(typeof(ISmileyDefinition))]
    [PartCreationPolicy(CreationPolicy.Shared)]
    public sealed class SunglassesSmileyDefinition : ISmileyDefinition
    {
        public const string IDString = "Sunglasses";
        public string ID { get { return IDString; } }
        public string[] Patterns { get { return new string[] { @"B-)", @"B-|", @"8-)", @"8-|" }; } }
    }
}
